//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS IoTTwinMaker service.
///
/// IoT TwinMaker is a service with which you can build operational digital twins of physical systems. IoT TwinMaker overlays measurements and analysis from real-world sensors, cameras, and enterprise applications so you can create data visualizations to monitor your physical factory, building, or industrial plant. You can use this real-world data to monitor operations and diagnose and repair errors.
public struct IoTTwinMaker: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the IoTTwinMaker client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "IoTTwinMaker",
            serviceIdentifier: "iottwinmaker",
            serviceProtocol: .restjson,
            apiVersion: "2021-11-29",
            endpoint: endpoint,
            serviceEndpoints: Self.serviceEndpoints,
            variantEndpoints: Self.variantEndpoints,
            errorType: IoTTwinMakerErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }


    /// custom endpoints for regions
    static var serviceEndpoints: [String: String] {[
        "api-ap-northeast-1": "api.iottwinmaker.ap-northeast-1.amazonaws.com",
        "api-ap-northeast-2": "api.iottwinmaker.ap-northeast-2.amazonaws.com",
        "api-ap-south-1": "api.iottwinmaker.ap-south-1.amazonaws.com",
        "api-ap-southeast-1": "api.iottwinmaker.ap-southeast-1.amazonaws.com",
        "api-ap-southeast-2": "api.iottwinmaker.ap-southeast-2.amazonaws.com",
        "api-cn-north-1": "api.iottwinmaker.cn-north-1.amazonaws.com.cn",
        "api-eu-central-1": "api.iottwinmaker.eu-central-1.amazonaws.com",
        "api-eu-west-1": "api.iottwinmaker.eu-west-1.amazonaws.com",
        "api-us-east-1": "api.iottwinmaker.us-east-1.amazonaws.com",
        "api-us-gov-west-1": "api.iottwinmaker.us-gov-west-1.amazonaws.com",
        "api-us-west-2": "api.iottwinmaker.us-west-2.amazonaws.com",
        "data-ap-northeast-1": "data.iottwinmaker.ap-northeast-1.amazonaws.com",
        "data-ap-northeast-2": "data.iottwinmaker.ap-northeast-2.amazonaws.com",
        "data-ap-south-1": "data.iottwinmaker.ap-south-1.amazonaws.com",
        "data-ap-southeast-1": "data.iottwinmaker.ap-southeast-1.amazonaws.com",
        "data-ap-southeast-2": "data.iottwinmaker.ap-southeast-2.amazonaws.com",
        "data-cn-north-1": "data.iottwinmaker.cn-north-1.amazonaws.com.cn",
        "data-eu-central-1": "data.iottwinmaker.eu-central-1.amazonaws.com",
        "data-eu-west-1": "data.iottwinmaker.eu-west-1.amazonaws.com",
        "data-us-east-1": "data.iottwinmaker.us-east-1.amazonaws.com",
        "data-us-gov-west-1": "data.iottwinmaker.us-gov-west-1.amazonaws.com",
        "data-us-west-2": "data.iottwinmaker.us-west-2.amazonaws.com",
        "fips-api-us-east-1": "api.iottwinmaker-fips.us-east-1.amazonaws.com",
        "fips-api-us-gov-west-1": "api.iottwinmaker-fips.us-gov-west-1.amazonaws.com",
        "fips-api-us-west-2": "api.iottwinmaker-fips.us-west-2.amazonaws.com",
        "fips-data-us-east-1": "data.iottwinmaker-fips.us-east-1.amazonaws.com",
        "fips-data-us-gov-west-1": "data.iottwinmaker-fips.us-gov-west-1.amazonaws.com",
        "fips-data-us-west-2": "data.iottwinmaker-fips.us-west-2.amazonaws.com"
    ]}


    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "us-east-1": "iottwinmaker-fips.us-east-1.amazonaws.com",
            "us-gov-west-1": "iottwinmaker-fips.us-gov-west-1.amazonaws.com",
            "us-west-2": "iottwinmaker-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Sets values for multiple time series properties.
    @Sendable
    @inlinable
    public func batchPutPropertyValues(_ input: BatchPutPropertyValuesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchPutPropertyValuesResponse {
        try await self.client.execute(
            operation: "BatchPutPropertyValues", 
            path: "/workspaces/{workspaceId}/entity-properties", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Sets values for multiple time series properties.
    ///
    /// Parameters:
    ///   - entries: An object that maps strings to the property value entries to set. Each string in the mapping must be unique to this object.
    ///   - workspaceId: The ID of the workspace that contains the properties to set.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchPutPropertyValues(
        entries: [PropertyValueEntry],
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchPutPropertyValuesResponse {
        let input = BatchPutPropertyValuesRequest(
            entries: entries, 
            workspaceId: workspaceId
        )
        return try await self.batchPutPropertyValues(input, logger: logger)
    }

    /// Cancels the metadata transfer job.
    @Sendable
    @inlinable
    public func cancelMetadataTransferJob(_ input: CancelMetadataTransferJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CancelMetadataTransferJobResponse {
        try await self.client.execute(
            operation: "CancelMetadataTransferJob", 
            path: "/metadata-transfer-jobs/{metadataTransferJobId}/cancel", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Cancels the metadata transfer job.
    ///
    /// Parameters:
    ///   - metadataTransferJobId: The metadata transfer job Id.
    ///   - logger: Logger use during operation
    @inlinable
    public func cancelMetadataTransferJob(
        metadataTransferJobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CancelMetadataTransferJobResponse {
        let input = CancelMetadataTransferJobRequest(
            metadataTransferJobId: metadataTransferJobId
        )
        return try await self.cancelMetadataTransferJob(input, logger: logger)
    }

    /// Creates a component type.
    @Sendable
    @inlinable
    public func createComponentType(_ input: CreateComponentTypeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateComponentTypeResponse {
        try await self.client.execute(
            operation: "CreateComponentType", 
            path: "/workspaces/{workspaceId}/component-types/{componentTypeId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Creates a component type.
    ///
    /// Parameters:
    ///   - componentTypeId: The ID of the component type.
    ///   - componentTypeName: A friendly name for the component type.
    ///   - compositeComponentTypes: This is an object that maps strings to compositeComponentTypes of the componentType.  CompositeComponentType is referenced by componentTypeId.
    ///   - description: The description of the component type.
    ///   - extendsFrom: Specifies the parent component type to extend.
    ///   - functions: An object that maps strings to the functions in the component type. Each string in the mapping must be unique to this object.
    ///   - isSingleton: A Boolean value that specifies whether an entity can have more than one component of this type.
    ///   - propertyDefinitions: An object that maps strings to the property definitions in the component type. Each string in the mapping must be unique to this object.
    ///   - propertyGroups: 
    ///   - tags: Metadata that you can use to manage the component type.
    ///   - workspaceId: The ID of the workspace that contains the component type.
    ///   - logger: Logger use during operation
    @inlinable
    public func createComponentType(
        componentTypeId: String,
        componentTypeName: String? = nil,
        compositeComponentTypes: [String: CompositeComponentTypeRequest]? = nil,
        description: String? = nil,
        extendsFrom: [String]? = nil,
        functions: [String: FunctionRequest]? = nil,
        isSingleton: Bool? = nil,
        propertyDefinitions: [String: PropertyDefinitionRequest]? = nil,
        propertyGroups: [String: PropertyGroupRequest]? = nil,
        tags: [String: String]? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateComponentTypeResponse {
        let input = CreateComponentTypeRequest(
            componentTypeId: componentTypeId, 
            componentTypeName: componentTypeName, 
            compositeComponentTypes: compositeComponentTypes, 
            description: description, 
            extendsFrom: extendsFrom, 
            functions: functions, 
            isSingleton: isSingleton, 
            propertyDefinitions: propertyDefinitions, 
            propertyGroups: propertyGroups, 
            tags: tags, 
            workspaceId: workspaceId
        )
        return try await self.createComponentType(input, logger: logger)
    }

    /// Creates an entity.
    @Sendable
    @inlinable
    public func createEntity(_ input: CreateEntityRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateEntityResponse {
        try await self.client.execute(
            operation: "CreateEntity", 
            path: "/workspaces/{workspaceId}/entities", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Creates an entity.
    ///
    /// Parameters:
    ///   - components: An object that maps strings to the components in the entity. Each string in the mapping must be unique to this object.
    ///   - compositeComponents: This is an object that maps strings to compositeComponent updates in the request.  Each key of the map represents the componentPath of the compositeComponent.
    ///   - description: The description of the entity.
    ///   - entityId: The ID of the entity.
    ///   - entityName: The name of the entity.
    ///   - parentEntityId: The ID of the entity's parent entity.
    ///   - tags: Metadata that you can use to manage the entity.
    ///   - workspaceId: The ID of the workspace that contains the entity.
    ///   - logger: Logger use during operation
    @inlinable
    public func createEntity(
        components: [String: ComponentRequest]? = nil,
        compositeComponents: [String: CompositeComponentRequest]? = nil,
        description: String? = nil,
        entityId: String? = nil,
        entityName: String,
        parentEntityId: String? = nil,
        tags: [String: String]? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateEntityResponse {
        let input = CreateEntityRequest(
            components: components, 
            compositeComponents: compositeComponents, 
            description: description, 
            entityId: entityId, 
            entityName: entityName, 
            parentEntityId: parentEntityId, 
            tags: tags, 
            workspaceId: workspaceId
        )
        return try await self.createEntity(input, logger: logger)
    }

    /// Creates a new metadata transfer job.
    @Sendable
    @inlinable
    public func createMetadataTransferJob(_ input: CreateMetadataTransferJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateMetadataTransferJobResponse {
        try await self.client.execute(
            operation: "CreateMetadataTransferJob", 
            path: "/metadata-transfer-jobs", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Creates a new metadata transfer job.
    ///
    /// Parameters:
    ///   - description: The metadata transfer job description.
    ///   - destination: The metadata transfer job destination.
    ///   - metadataTransferJobId: The metadata transfer job Id.
    ///   - sources: The metadata transfer job sources.
    ///   - logger: Logger use during operation
    @inlinable
    public func createMetadataTransferJob(
        description: String? = nil,
        destination: DestinationConfiguration,
        metadataTransferJobId: String? = nil,
        sources: [SourceConfiguration],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateMetadataTransferJobResponse {
        let input = CreateMetadataTransferJobRequest(
            description: description, 
            destination: destination, 
            metadataTransferJobId: metadataTransferJobId, 
            sources: sources
        )
        return try await self.createMetadataTransferJob(input, logger: logger)
    }

    /// Creates a scene.
    @Sendable
    @inlinable
    public func createScene(_ input: CreateSceneRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateSceneResponse {
        try await self.client.execute(
            operation: "CreateScene", 
            path: "/workspaces/{workspaceId}/scenes", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Creates a scene.
    ///
    /// Parameters:
    ///   - capabilities: A list of capabilities that the scene uses to render itself.
    ///   - contentLocation: The relative path that specifies the location of the content definition file.
    ///   - description: The description for this scene.
    ///   - sceneId: The ID of the scene.
    ///   - sceneMetadata: The request metadata.
    ///   - tags: Metadata that you can use to manage the scene.
    ///   - workspaceId: The ID of the workspace that contains the scene.
    ///   - logger: Logger use during operation
    @inlinable
    public func createScene(
        capabilities: [String]? = nil,
        contentLocation: String,
        description: String? = nil,
        sceneId: String,
        sceneMetadata: [String: String]? = nil,
        tags: [String: String]? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateSceneResponse {
        let input = CreateSceneRequest(
            capabilities: capabilities, 
            contentLocation: contentLocation, 
            description: description, 
            sceneId: sceneId, 
            sceneMetadata: sceneMetadata, 
            tags: tags, 
            workspaceId: workspaceId
        )
        return try await self.createScene(input, logger: logger)
    }

    /// This action creates a SyncJob.
    @Sendable
    @inlinable
    public func createSyncJob(_ input: CreateSyncJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateSyncJobResponse {
        try await self.client.execute(
            operation: "CreateSyncJob", 
            path: "/workspaces/{workspaceId}/sync-jobs/{syncSource}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// This action creates a SyncJob.
    ///
    /// Parameters:
    ///   - syncRole: The SyncJob IAM role. This IAM role is used by the SyncJob to read from the syncSource, and create, update, or delete the corresponding resources.
    ///   - syncSource: The sync source.  Currently the only supported syncSoource is SITEWISE .
    ///   - tags: The SyncJob tags.
    ///   - workspaceId: The workspace ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func createSyncJob(
        syncRole: String,
        syncSource: String,
        tags: [String: String]? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateSyncJobResponse {
        let input = CreateSyncJobRequest(
            syncRole: syncRole, 
            syncSource: syncSource, 
            tags: tags, 
            workspaceId: workspaceId
        )
        return try await self.createSyncJob(input, logger: logger)
    }

    /// Creates a workplace.
    @Sendable
    @inlinable
    public func createWorkspace(_ input: CreateWorkspaceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateWorkspaceResponse {
        try await self.client.execute(
            operation: "CreateWorkspace", 
            path: "/workspaces/{workspaceId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Creates a workplace.
    ///
    /// Parameters:
    ///   - description: The description of the workspace.
    ///   - role: The ARN of the execution role associated with the workspace.
    ///   - s3Location: The ARN of the S3 bucket where resources associated with the workspace are stored.
    ///   - tags: Metadata that you can use to manage the workspace
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger use during operation
    @inlinable
    public func createWorkspace(
        description: String? = nil,
        role: String? = nil,
        s3Location: String? = nil,
        tags: [String: String]? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateWorkspaceResponse {
        let input = CreateWorkspaceRequest(
            description: description, 
            role: role, 
            s3Location: s3Location, 
            tags: tags, 
            workspaceId: workspaceId
        )
        return try await self.createWorkspace(input, logger: logger)
    }

    /// Deletes a component type.
    @Sendable
    @inlinable
    public func deleteComponentType(_ input: DeleteComponentTypeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteComponentTypeResponse {
        try await self.client.execute(
            operation: "DeleteComponentType", 
            path: "/workspaces/{workspaceId}/component-types/{componentTypeId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Deletes a component type.
    ///
    /// Parameters:
    ///   - componentTypeId: The ID of the component type to delete.
    ///   - workspaceId: The ID of the workspace that contains the component type.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteComponentType(
        componentTypeId: String,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteComponentTypeResponse {
        let input = DeleteComponentTypeRequest(
            componentTypeId: componentTypeId, 
            workspaceId: workspaceId
        )
        return try await self.deleteComponentType(input, logger: logger)
    }

    /// Deletes an entity.
    @Sendable
    @inlinable
    public func deleteEntity(_ input: DeleteEntityRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteEntityResponse {
        try await self.client.execute(
            operation: "DeleteEntity", 
            path: "/workspaces/{workspaceId}/entities/{entityId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Deletes an entity.
    ///
    /// Parameters:
    ///   - entityId: The ID of the entity to delete.
    ///   - isRecursive: A Boolean value that specifies whether the operation deletes child entities.
    ///   - workspaceId: The ID of the workspace that contains the entity to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteEntity(
        entityId: String,
        isRecursive: Bool? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteEntityResponse {
        let input = DeleteEntityRequest(
            entityId: entityId, 
            isRecursive: isRecursive, 
            workspaceId: workspaceId
        )
        return try await self.deleteEntity(input, logger: logger)
    }

    /// Deletes a scene.
    @Sendable
    @inlinable
    public func deleteScene(_ input: DeleteSceneRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteSceneResponse {
        try await self.client.execute(
            operation: "DeleteScene", 
            path: "/workspaces/{workspaceId}/scenes/{sceneId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Deletes a scene.
    ///
    /// Parameters:
    ///   - sceneId: The ID of the scene to delete.
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteScene(
        sceneId: String,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteSceneResponse {
        let input = DeleteSceneRequest(
            sceneId: sceneId, 
            workspaceId: workspaceId
        )
        return try await self.deleteScene(input, logger: logger)
    }

    /// Delete the SyncJob.
    @Sendable
    @inlinable
    public func deleteSyncJob(_ input: DeleteSyncJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteSyncJobResponse {
        try await self.client.execute(
            operation: "DeleteSyncJob", 
            path: "/workspaces/{workspaceId}/sync-jobs/{syncSource}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Delete the SyncJob.
    ///
    /// Parameters:
    ///   - syncSource: The sync source.  Currently the only supported syncSource is SITEWISE .
    ///   - workspaceId: The workspace ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteSyncJob(
        syncSource: String,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteSyncJobResponse {
        let input = DeleteSyncJobRequest(
            syncSource: syncSource, 
            workspaceId: workspaceId
        )
        return try await self.deleteSyncJob(input, logger: logger)
    }

    /// Deletes a workspace.
    @Sendable
    @inlinable
    public func deleteWorkspace(_ input: DeleteWorkspaceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteWorkspaceResponse {
        try await self.client.execute(
            operation: "DeleteWorkspace", 
            path: "/workspaces/{workspaceId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Deletes a workspace.
    ///
    /// Parameters:
    ///   - workspaceId: The ID of the workspace to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteWorkspace(
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteWorkspaceResponse {
        let input = DeleteWorkspaceRequest(
            workspaceId: workspaceId
        )
        return try await self.deleteWorkspace(input, logger: logger)
    }

    /// Run queries to access information from your knowledge graph of entities within individual workspaces.  The ExecuteQuery action only works with Amazon Web Services Java SDK2. ExecuteQuery will not work with any Amazon Web Services Java SDK version &lt; 2.x.
    @Sendable
    @inlinable
    public func executeQuery(_ input: ExecuteQueryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ExecuteQueryResponse {
        try await self.client.execute(
            operation: "ExecuteQuery", 
            path: "/queries/execution", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Run queries to access information from your knowledge graph of entities within individual workspaces.  The ExecuteQuery action only works with Amazon Web Services Java SDK2. ExecuteQuery will not work with any Amazon Web Services Java SDK version &lt; 2.x.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return at one time. The default is 50.
    ///   - nextToken: The string that specifies the next page of results.
    ///   - queryStatement: The query statement.
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger use during operation
    @inlinable
    public func executeQuery(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        queryStatement: String,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ExecuteQueryResponse {
        let input = ExecuteQueryRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            queryStatement: queryStatement, 
            workspaceId: workspaceId
        )
        return try await self.executeQuery(input, logger: logger)
    }

    /// Retrieves information about a component type.
    @Sendable
    @inlinable
    public func getComponentType(_ input: GetComponentTypeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetComponentTypeResponse {
        try await self.client.execute(
            operation: "GetComponentType", 
            path: "/workspaces/{workspaceId}/component-types/{componentTypeId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about a component type.
    ///
    /// Parameters:
    ///   - componentTypeId: The ID of the component type.
    ///   - workspaceId: The ID of the workspace that contains the component type.
    ///   - logger: Logger use during operation
    @inlinable
    public func getComponentType(
        componentTypeId: String,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetComponentTypeResponse {
        let input = GetComponentTypeRequest(
            componentTypeId: componentTypeId, 
            workspaceId: workspaceId
        )
        return try await self.getComponentType(input, logger: logger)
    }

    /// Retrieves information about an entity.
    @Sendable
    @inlinable
    public func getEntity(_ input: GetEntityRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetEntityResponse {
        try await self.client.execute(
            operation: "GetEntity", 
            path: "/workspaces/{workspaceId}/entities/{entityId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about an entity.
    ///
    /// Parameters:
    ///   - entityId: The ID of the entity.
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger use during operation
    @inlinable
    public func getEntity(
        entityId: String,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetEntityResponse {
        let input = GetEntityRequest(
            entityId: entityId, 
            workspaceId: workspaceId
        )
        return try await self.getEntity(input, logger: logger)
    }

    /// Gets a nmetadata transfer job.
    @Sendable
    @inlinable
    public func getMetadataTransferJob(_ input: GetMetadataTransferJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMetadataTransferJobResponse {
        try await self.client.execute(
            operation: "GetMetadataTransferJob", 
            path: "/metadata-transfer-jobs/{metadataTransferJobId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Gets a nmetadata transfer job.
    ///
    /// Parameters:
    ///   - metadataTransferJobId: The metadata transfer job Id.
    ///   - logger: Logger use during operation
    @inlinable
    public func getMetadataTransferJob(
        metadataTransferJobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMetadataTransferJobResponse {
        let input = GetMetadataTransferJobRequest(
            metadataTransferJobId: metadataTransferJobId
        )
        return try await self.getMetadataTransferJob(input, logger: logger)
    }

    /// Gets the pricing plan.
    @Sendable
    @inlinable
    public func getPricingPlan(_ input: GetPricingPlanRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetPricingPlanResponse {
        try await self.client.execute(
            operation: "GetPricingPlan", 
            path: "/pricingplan", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Gets the pricing plan.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getPricingPlan(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetPricingPlanResponse {
        let input = GetPricingPlanRequest(
        )
        return try await self.getPricingPlan(input, logger: logger)
    }

    /// Gets the property values for a component, component type, entity, or workspace. You must specify a value for either componentName, componentTypeId, entityId, or workspaceId.
    @Sendable
    @inlinable
    public func getPropertyValue(_ input: GetPropertyValueRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetPropertyValueResponse {
        try await self.client.execute(
            operation: "GetPropertyValue", 
            path: "/workspaces/{workspaceId}/entity-properties/value", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Gets the property values for a component, component type, entity, or workspace. You must specify a value for either componentName, componentTypeId, entityId, or workspaceId.
    ///
    /// Parameters:
    ///   - componentName: The name of the component whose property values the operation returns.
    ///   - componentPath: This string specifies the path to the composite component, starting from the top-level component.
    ///   - componentTypeId: The ID of the component type whose property values the operation returns.
    ///   - entityId: The ID of the entity whose property values the operation returns.
    ///   - maxResults: The maximum number of results to return at one time. The default is 25. Valid Range: Minimum value of 1. Maximum value of 250.
    ///   - nextToken: The string that specifies the next page of results.
    ///   - propertyGroupName: The property group name.
    ///   - selectedProperties: The properties whose values the operation returns.
    ///   - tabularConditions: The tabular conditions.
    ///   - workspaceId: The ID of the workspace whose values the operation returns.
    ///   - logger: Logger use during operation
    @inlinable
    public func getPropertyValue(
        componentName: String? = nil,
        componentPath: String? = nil,
        componentTypeId: String? = nil,
        entityId: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        propertyGroupName: String? = nil,
        selectedProperties: [String],
        tabularConditions: TabularConditions? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetPropertyValueResponse {
        let input = GetPropertyValueRequest(
            componentName: componentName, 
            componentPath: componentPath, 
            componentTypeId: componentTypeId, 
            entityId: entityId, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            propertyGroupName: propertyGroupName, 
            selectedProperties: selectedProperties, 
            tabularConditions: tabularConditions, 
            workspaceId: workspaceId
        )
        return try await self.getPropertyValue(input, logger: logger)
    }

    /// Retrieves information about the history of a time series property value for a component, component type, entity, or workspace. You must specify a value for workspaceId. For entity-specific queries, specify values for componentName and entityId. For cross-entity quries, specify a value for componentTypeId.
    @Sendable
    @inlinable
    public func getPropertyValueHistory(_ input: GetPropertyValueHistoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetPropertyValueHistoryResponse {
        try await self.client.execute(
            operation: "GetPropertyValueHistory", 
            path: "/workspaces/{workspaceId}/entity-properties/history", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Retrieves information about the history of a time series property value for a component, component type, entity, or workspace. You must specify a value for workspaceId. For entity-specific queries, specify values for componentName and entityId. For cross-entity quries, specify a value for componentTypeId.
    ///
    /// Parameters:
    ///   - componentName: The name of the component.
    ///   - componentPath: This string specifies the path to the composite component, starting from the top-level component.
    ///   - componentTypeId: The ID of the component type.
    ///   - endTime: The ISO8601 DateTime of the latest property value to return. For more information about the ISO8601 DateTime format, see the data type PropertyValue.
    ///   - entityId: The ID of the entity.
    ///   - interpolation: An object that specifies the interpolation type and the interval over which to interpolate data.
    ///   - maxResults: The maximum number of results to return at one time. The default is 25. Valid Range: Minimum value of 1. Maximum value of 250.
    ///   - nextToken: The string that specifies the next page of results.
    ///   - orderByTime: The time direction to use in the result order.
    ///   - propertyFilters: A list of objects that filter the property value history request.
    ///   - selectedProperties: A list of properties whose value histories the request retrieves.
    ///   - startTime: The ISO8601 DateTime of the earliest property value to return. For more information about the ISO8601 DateTime format, see the data type PropertyValue.
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger use during operation
    @inlinable
    public func getPropertyValueHistory(
        componentName: String? = nil,
        componentPath: String? = nil,
        componentTypeId: String? = nil,
        endTime: String? = nil,
        entityId: String? = nil,
        interpolation: InterpolationParameters? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        orderByTime: OrderByTime? = nil,
        propertyFilters: [PropertyFilter]? = nil,
        selectedProperties: [String],
        startTime: String? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetPropertyValueHistoryResponse {
        let input = GetPropertyValueHistoryRequest(
            componentName: componentName, 
            componentPath: componentPath, 
            componentTypeId: componentTypeId, 
            endTime: endTime, 
            entityId: entityId, 
            interpolation: interpolation, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            orderByTime: orderByTime, 
            propertyFilters: propertyFilters, 
            selectedProperties: selectedProperties, 
            startTime: startTime, 
            workspaceId: workspaceId
        )
        return try await self.getPropertyValueHistory(input, logger: logger)
    }

    /// Retrieves information about a scene.
    @Sendable
    @inlinable
    public func getScene(_ input: GetSceneRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetSceneResponse {
        try await self.client.execute(
            operation: "GetScene", 
            path: "/workspaces/{workspaceId}/scenes/{sceneId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about a scene.
    ///
    /// Parameters:
    ///   - sceneId: The ID of the scene.
    ///   - workspaceId: The ID of the workspace that contains the scene.
    ///   - logger: Logger use during operation
    @inlinable
    public func getScene(
        sceneId: String,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetSceneResponse {
        let input = GetSceneRequest(
            sceneId: sceneId, 
            workspaceId: workspaceId
        )
        return try await self.getScene(input, logger: logger)
    }

    /// Gets the SyncJob.
    @Sendable
    @inlinable
    public func getSyncJob(_ input: GetSyncJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetSyncJobResponse {
        try await self.client.execute(
            operation: "GetSyncJob", 
            path: "/sync-jobs/{syncSource}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Gets the SyncJob.
    ///
    /// Parameters:
    ///   - syncSource: The sync source.  Currently the only supported syncSource is SITEWISE .
    ///   - workspaceId: The workspace ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func getSyncJob(
        syncSource: String,
        workspaceId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetSyncJobResponse {
        let input = GetSyncJobRequest(
            syncSource: syncSource, 
            workspaceId: workspaceId
        )
        return try await self.getSyncJob(input, logger: logger)
    }

    /// Retrieves information about a workspace.
    @Sendable
    @inlinable
    public func getWorkspace(_ input: GetWorkspaceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetWorkspaceResponse {
        try await self.client.execute(
            operation: "GetWorkspace", 
            path: "/workspaces/{workspaceId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about a workspace.
    ///
    /// Parameters:
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger use during operation
    @inlinable
    public func getWorkspace(
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetWorkspaceResponse {
        let input = GetWorkspaceRequest(
            workspaceId: workspaceId
        )
        return try await self.getWorkspace(input, logger: logger)
    }

    /// Lists all component types in a workspace.
    @Sendable
    @inlinable
    public func listComponentTypes(_ input: ListComponentTypesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListComponentTypesResponse {
        try await self.client.execute(
            operation: "ListComponentTypes", 
            path: "/workspaces/{workspaceId}/component-types-list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Lists all component types in a workspace.
    ///
    /// Parameters:
    ///   - filters: A list of objects that filter the request.
    ///   - maxResults: The maximum number of results to return at one time. The default is 25. Valid Range: Minimum value of 1. Maximum value of 250.
    ///   - nextToken: The string that specifies the next page of results.
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger use during operation
    @inlinable
    public func listComponentTypes(
        filters: [ListComponentTypesFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListComponentTypesResponse {
        let input = ListComponentTypesRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            workspaceId: workspaceId
        )
        return try await self.listComponentTypes(input, logger: logger)
    }

    /// This API lists the components of an entity.
    @Sendable
    @inlinable
    public func listComponents(_ input: ListComponentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListComponentsResponse {
        try await self.client.execute(
            operation: "ListComponents", 
            path: "/workspaces/{workspaceId}/entities/{entityId}/components-list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// This API lists the components of an entity.
    ///
    /// Parameters:
    ///   - componentPath: This string specifies the path to the composite component, starting from the top-level component.
    ///   - entityId: The ID for the entity whose metadata (component/properties) is returned by the operation.
    ///   - maxResults: The maximum number of results returned at one time. The default is 25.
    ///   - nextToken: The string that specifies the next page of results.
    ///   - workspaceId: The workspace ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func listComponents(
        componentPath: String? = nil,
        entityId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListComponentsResponse {
        let input = ListComponentsRequest(
            componentPath: componentPath, 
            entityId: entityId, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            workspaceId: workspaceId
        )
        return try await self.listComponents(input, logger: logger)
    }

    /// Lists all entities in a workspace.
    @Sendable
    @inlinable
    public func listEntities(_ input: ListEntitiesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEntitiesResponse {
        try await self.client.execute(
            operation: "ListEntities", 
            path: "/workspaces/{workspaceId}/entities-list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Lists all entities in a workspace.
    ///
    /// Parameters:
    ///   - filters: A list of objects that filter the request.  Only one object is accepted as a valid input.
    ///   - maxResults: The maximum number of results to return at one time. The default is 25. Valid Range: Minimum value of 1. Maximum value of 250.
    ///   - nextToken: The string that specifies the next page of results.
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEntities(
        filters: [ListEntitiesFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEntitiesResponse {
        let input = ListEntitiesRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            workspaceId: workspaceId
        )
        return try await self.listEntities(input, logger: logger)
    }

    /// Lists the metadata transfer jobs.
    @Sendable
    @inlinable
    public func listMetadataTransferJobs(_ input: ListMetadataTransferJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListMetadataTransferJobsResponse {
        try await self.client.execute(
            operation: "ListMetadataTransferJobs", 
            path: "/metadata-transfer-jobs-list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Lists the metadata transfer jobs.
    ///
    /// Parameters:
    ///   - destinationType: The metadata transfer job's destination type.
    ///   - filters: An object that filters metadata transfer jobs.
    ///   - maxResults: The maximum number of results to return at one time.
    ///   - nextToken: The string that specifies the next page of results.
    ///   - sourceType: The metadata transfer job's source type.
    ///   - logger: Logger use during operation
    @inlinable
    public func listMetadataTransferJobs(
        destinationType: DestinationType,
        filters: [ListMetadataTransferJobsFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        sourceType: SourceType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListMetadataTransferJobsResponse {
        let input = ListMetadataTransferJobsRequest(
            destinationType: destinationType, 
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            sourceType: sourceType
        )
        return try await self.listMetadataTransferJobs(input, logger: logger)
    }

    /// This API lists the properties of a component.
    @Sendable
    @inlinable
    public func listProperties(_ input: ListPropertiesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListPropertiesResponse {
        try await self.client.execute(
            operation: "ListProperties", 
            path: "/workspaces/{workspaceId}/properties-list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// This API lists the properties of a component.
    ///
    /// Parameters:
    ///   - componentName: The name of the component whose properties are returned by the operation.
    ///   - componentPath: This string specifies the path to the composite component, starting from the top-level component.
    ///   - entityId: The ID for the entity whose metadata (component/properties) is returned by the operation.
    ///   - maxResults: The maximum number of results returned at one time. The default is 25.
    ///   - nextToken: The string that specifies the next page of results.
    ///   - workspaceId: The workspace ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func listProperties(
        componentName: String? = nil,
        componentPath: String? = nil,
        entityId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListPropertiesResponse {
        let input = ListPropertiesRequest(
            componentName: componentName, 
            componentPath: componentPath, 
            entityId: entityId, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            workspaceId: workspaceId
        )
        return try await self.listProperties(input, logger: logger)
    }

    /// Lists all scenes in a workspace.
    @Sendable
    @inlinable
    public func listScenes(_ input: ListScenesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListScenesResponse {
        try await self.client.execute(
            operation: "ListScenes", 
            path: "/workspaces/{workspaceId}/scenes-list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Lists all scenes in a workspace.
    ///
    /// Parameters:
    ///   - maxResults: Specifies the maximum number of results to display.
    ///   - nextToken: The string that specifies the next page of results.
    ///   - workspaceId: The ID of the workspace that contains the scenes.
    ///   - logger: Logger use during operation
    @inlinable
    public func listScenes(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListScenesResponse {
        let input = ListScenesRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            workspaceId: workspaceId
        )
        return try await self.listScenes(input, logger: logger)
    }

    /// List all SyncJobs.
    @Sendable
    @inlinable
    public func listSyncJobs(_ input: ListSyncJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSyncJobsResponse {
        try await self.client.execute(
            operation: "ListSyncJobs", 
            path: "/workspaces/{workspaceId}/sync-jobs-list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// List all SyncJobs.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return at one time. The default is 50. Valid Range: Minimum value of 0. Maximum value of 200.
    ///   - nextToken: The string that specifies the next page of results.
    ///   - workspaceId: The ID of the workspace that contains the sync job.
    ///   - logger: Logger use during operation
    @inlinable
    public func listSyncJobs(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSyncJobsResponse {
        let input = ListSyncJobsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            workspaceId: workspaceId
        )
        return try await self.listSyncJobs(input, logger: logger)
    }

    /// Lists the sync resources.
    @Sendable
    @inlinable
    public func listSyncResources(_ input: ListSyncResourcesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSyncResourcesResponse {
        try await self.client.execute(
            operation: "ListSyncResources", 
            path: "/workspaces/{workspaceId}/sync-jobs/{syncSource}/resources-list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Lists the sync resources.
    ///
    /// Parameters:
    ///   - filters: A list of objects that filter the request. The following filter combinations are supported:   Filter with state   Filter with ResourceType and ResourceId   Filter with ResourceType and ExternalId
    ///   - maxResults: The maximum number of results to return at one time. The default is 50. Valid Range: Minimum value of 0. Maximum value of 200.
    ///   - nextToken: The string that specifies the next page of results.
    ///   - syncSource: The sync source.  Currently the only supported syncSource is SITEWISE .
    ///   - workspaceId: The ID of the workspace that contains the sync job.
    ///   - logger: Logger use during operation
    @inlinable
    public func listSyncResources(
        filters: [SyncResourceFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        syncSource: String,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSyncResourcesResponse {
        let input = ListSyncResourcesRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            syncSource: syncSource, 
            workspaceId: workspaceId
        )
        return try await self.listSyncResources(input, logger: logger)
    }

    /// Lists all tags associated with a resource.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/tags-list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Lists all tags associated with a resource.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return at one time. The default is 25. Valid Range: Minimum value of 1. Maximum value of 250.
    ///   - nextToken: The string that specifies the next page of results.
    ///   - resourceARN: The ARN of the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceARN: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceARN: resourceARN
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Retrieves information about workspaces in the current account.
    @Sendable
    @inlinable
    public func listWorkspaces(_ input: ListWorkspacesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListWorkspacesResponse {
        try await self.client.execute(
            operation: "ListWorkspaces", 
            path: "/workspaces-list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about workspaces in the current account.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return at one time. The default is 25. Valid Range: Minimum value of 1. Maximum value of 250.
    ///   - nextToken: The string that specifies the next page of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listWorkspaces(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListWorkspacesResponse {
        let input = ListWorkspacesRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listWorkspaces(input, logger: logger)
    }

    /// Adds tags to a resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/tags", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Adds tags to a resource.
    ///
    /// Parameters:
    ///   - resourceARN: The ARN of the resource.
    ///   - tags: Metadata to add to this resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceARN: String,
        tags: [String: String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceARN: resourceARN, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Removes tags from a resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/tags", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Removes tags from a resource.
    ///
    /// Parameters:
    ///   - resourceARN: The ARN of the resource.
    ///   - tagKeys: A list of tag key names to remove from the resource. You don't specify the value. Both the key and its associated value are removed.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceARN: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceARN: resourceARN, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates information in a component type.
    @Sendable
    @inlinable
    public func updateComponentType(_ input: UpdateComponentTypeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateComponentTypeResponse {
        try await self.client.execute(
            operation: "UpdateComponentType", 
            path: "/workspaces/{workspaceId}/component-types/{componentTypeId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Updates information in a component type.
    ///
    /// Parameters:
    ///   - componentTypeId: The ID of the component type.
    ///   - componentTypeName: The component type name.
    ///   - compositeComponentTypes: This is an object that maps strings to compositeComponentTypes of the componentType.  CompositeComponentType is referenced by componentTypeId.
    ///   - description: The description of the component type.
    ///   - extendsFrom: Specifies the component type that this component type extends.
    ///   - functions: An object that maps strings to the functions in the component type. Each string in the mapping must be unique to this object.
    ///   - isSingleton: A Boolean value that specifies whether an entity can have more than one component of this type.
    ///   - propertyDefinitions: An object that maps strings to the property definitions in the component type. Each string in the mapping must be unique to this object.
    ///   - propertyGroups: The property groups.
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateComponentType(
        componentTypeId: String,
        componentTypeName: String? = nil,
        compositeComponentTypes: [String: CompositeComponentTypeRequest]? = nil,
        description: String? = nil,
        extendsFrom: [String]? = nil,
        functions: [String: FunctionRequest]? = nil,
        isSingleton: Bool? = nil,
        propertyDefinitions: [String: PropertyDefinitionRequest]? = nil,
        propertyGroups: [String: PropertyGroupRequest]? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateComponentTypeResponse {
        let input = UpdateComponentTypeRequest(
            componentTypeId: componentTypeId, 
            componentTypeName: componentTypeName, 
            compositeComponentTypes: compositeComponentTypes, 
            description: description, 
            extendsFrom: extendsFrom, 
            functions: functions, 
            isSingleton: isSingleton, 
            propertyDefinitions: propertyDefinitions, 
            propertyGroups: propertyGroups, 
            workspaceId: workspaceId
        )
        return try await self.updateComponentType(input, logger: logger)
    }

    /// Updates an entity.
    @Sendable
    @inlinable
    public func updateEntity(_ input: UpdateEntityRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateEntityResponse {
        try await self.client.execute(
            operation: "UpdateEntity", 
            path: "/workspaces/{workspaceId}/entities/{entityId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Updates an entity.
    ///
    /// Parameters:
    ///   - componentUpdates: An object that maps strings to the component updates in the request. Each string in the mapping must be unique to this object.
    ///   - compositeComponentUpdates: This is an object that maps strings to compositeComponent updates in the request. Each key  of the map represents the componentPath of the compositeComponent.
    ///   - description: The description of the entity.
    ///   - entityId: The ID of the entity.
    ///   - entityName: The name of the entity.
    ///   - parentEntityUpdate: An object that describes the update request for a parent entity.
    ///   - workspaceId: The ID of the workspace that contains the entity.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateEntity(
        componentUpdates: [String: ComponentUpdateRequest]? = nil,
        compositeComponentUpdates: [String: CompositeComponentUpdateRequest]? = nil,
        description: String? = nil,
        entityId: String,
        entityName: String? = nil,
        parentEntityUpdate: ParentEntityUpdateRequest? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateEntityResponse {
        let input = UpdateEntityRequest(
            componentUpdates: componentUpdates, 
            compositeComponentUpdates: compositeComponentUpdates, 
            description: description, 
            entityId: entityId, 
            entityName: entityName, 
            parentEntityUpdate: parentEntityUpdate, 
            workspaceId: workspaceId
        )
        return try await self.updateEntity(input, logger: logger)
    }

    /// Update the pricing plan.
    @Sendable
    @inlinable
    public func updatePricingPlan(_ input: UpdatePricingPlanRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdatePricingPlanResponse {
        try await self.client.execute(
            operation: "UpdatePricingPlan", 
            path: "/pricingplan", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Update the pricing plan.
    ///
    /// Parameters:
    ///   - bundleNames: The bundle names.
    ///   - pricingMode: The pricing mode.
    ///   - logger: Logger use during operation
    @inlinable
    public func updatePricingPlan(
        bundleNames: [String]? = nil,
        pricingMode: PricingMode,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdatePricingPlanResponse {
        let input = UpdatePricingPlanRequest(
            bundleNames: bundleNames, 
            pricingMode: pricingMode
        )
        return try await self.updatePricingPlan(input, logger: logger)
    }

    /// Updates a scene.
    @Sendable
    @inlinable
    public func updateScene(_ input: UpdateSceneRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateSceneResponse {
        try await self.client.execute(
            operation: "UpdateScene", 
            path: "/workspaces/{workspaceId}/scenes/{sceneId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Updates a scene.
    ///
    /// Parameters:
    ///   - capabilities: A list of capabilities that the scene uses to render.
    ///   - contentLocation: The relative path that specifies the location of the content definition file.
    ///   - description: The description of this scene.
    ///   - sceneId: The ID of the scene.
    ///   - sceneMetadata: The scene metadata.
    ///   - workspaceId: The ID of the workspace that contains the scene.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateScene(
        capabilities: [String]? = nil,
        contentLocation: String? = nil,
        description: String? = nil,
        sceneId: String,
        sceneMetadata: [String: String]? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateSceneResponse {
        let input = UpdateSceneRequest(
            capabilities: capabilities, 
            contentLocation: contentLocation, 
            description: description, 
            sceneId: sceneId, 
            sceneMetadata: sceneMetadata, 
            workspaceId: workspaceId
        )
        return try await self.updateScene(input, logger: logger)
    }

    /// Updates a workspace.
    @Sendable
    @inlinable
    public func updateWorkspace(_ input: UpdateWorkspaceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateWorkspaceResponse {
        try await self.client.execute(
            operation: "UpdateWorkspace", 
            path: "/workspaces/{workspaceId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Updates a workspace.
    ///
    /// Parameters:
    ///   - description: The description of the workspace.
    ///   - role: The ARN of the execution role associated with the workspace.
    ///   - s3Location: The ARN of the S3 bucket where resources associated with the workspace are stored.
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateWorkspace(
        description: String? = nil,
        role: String? = nil,
        s3Location: String? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateWorkspaceResponse {
        let input = UpdateWorkspaceRequest(
            description: description, 
            role: role, 
            s3Location: s3Location, 
            workspaceId: workspaceId
        )
        return try await self.updateWorkspace(input, logger: logger)
    }
}

extension IoTTwinMaker {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: IoTTwinMaker, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension IoTTwinMaker {
    /// Return PaginatorSequence for operation ``executeQuery(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func executeQueryPaginator(
        _ input: ExecuteQueryRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ExecuteQueryRequest, ExecuteQueryResponse> {
        return .init(
            input: input,
            command: self.executeQuery,
            inputKey: \ExecuteQueryRequest.nextToken,
            outputKey: \ExecuteQueryResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``executeQuery(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return at one time. The default is 50.
    ///   - queryStatement: The query statement.
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger used for logging
    @inlinable
    public func executeQueryPaginator(
        maxResults: Int? = nil,
        queryStatement: String,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ExecuteQueryRequest, ExecuteQueryResponse> {
        let input = ExecuteQueryRequest(
            maxResults: maxResults, 
            queryStatement: queryStatement, 
            workspaceId: workspaceId
        )
        return self.executeQueryPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getPropertyValue(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getPropertyValuePaginator(
        _ input: GetPropertyValueRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetPropertyValueRequest, GetPropertyValueResponse> {
        return .init(
            input: input,
            command: self.getPropertyValue,
            inputKey: \GetPropertyValueRequest.nextToken,
            outputKey: \GetPropertyValueResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getPropertyValue(_:logger:)``.
    ///
    /// - Parameters:
    ///   - componentName: The name of the component whose property values the operation returns.
    ///   - componentPath: This string specifies the path to the composite component, starting from the top-level component.
    ///   - componentTypeId: The ID of the component type whose property values the operation returns.
    ///   - entityId: The ID of the entity whose property values the operation returns.
    ///   - maxResults: The maximum number of results to return at one time. The default is 25. Valid Range: Minimum value of 1. Maximum value of 250.
    ///   - propertyGroupName: The property group name.
    ///   - selectedProperties: The properties whose values the operation returns.
    ///   - tabularConditions: The tabular conditions.
    ///   - workspaceId: The ID of the workspace whose values the operation returns.
    ///   - logger: Logger used for logging
    @inlinable
    public func getPropertyValuePaginator(
        componentName: String? = nil,
        componentPath: String? = nil,
        componentTypeId: String? = nil,
        entityId: String? = nil,
        maxResults: Int? = nil,
        propertyGroupName: String? = nil,
        selectedProperties: [String],
        tabularConditions: TabularConditions? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetPropertyValueRequest, GetPropertyValueResponse> {
        let input = GetPropertyValueRequest(
            componentName: componentName, 
            componentPath: componentPath, 
            componentTypeId: componentTypeId, 
            entityId: entityId, 
            maxResults: maxResults, 
            propertyGroupName: propertyGroupName, 
            selectedProperties: selectedProperties, 
            tabularConditions: tabularConditions, 
            workspaceId: workspaceId
        )
        return self.getPropertyValuePaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getPropertyValueHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getPropertyValueHistoryPaginator(
        _ input: GetPropertyValueHistoryRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetPropertyValueHistoryRequest, GetPropertyValueHistoryResponse> {
        return .init(
            input: input,
            command: self.getPropertyValueHistory,
            inputKey: \GetPropertyValueHistoryRequest.nextToken,
            outputKey: \GetPropertyValueHistoryResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getPropertyValueHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - componentName: The name of the component.
    ///   - componentPath: This string specifies the path to the composite component, starting from the top-level component.
    ///   - componentTypeId: The ID of the component type.
    ///   - endTime: The ISO8601 DateTime of the latest property value to return. For more information about the ISO8601 DateTime format, see the data type PropertyValue.
    ///   - entityId: The ID of the entity.
    ///   - interpolation: An object that specifies the interpolation type and the interval over which to interpolate data.
    ///   - maxResults: The maximum number of results to return at one time. The default is 25. Valid Range: Minimum value of 1. Maximum value of 250.
    ///   - orderByTime: The time direction to use in the result order.
    ///   - propertyFilters: A list of objects that filter the property value history request.
    ///   - selectedProperties: A list of properties whose value histories the request retrieves.
    ///   - startTime: The ISO8601 DateTime of the earliest property value to return. For more information about the ISO8601 DateTime format, see the data type PropertyValue.
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger used for logging
    @inlinable
    public func getPropertyValueHistoryPaginator(
        componentName: String? = nil,
        componentPath: String? = nil,
        componentTypeId: String? = nil,
        endTime: String? = nil,
        entityId: String? = nil,
        interpolation: InterpolationParameters? = nil,
        maxResults: Int? = nil,
        orderByTime: OrderByTime? = nil,
        propertyFilters: [PropertyFilter]? = nil,
        selectedProperties: [String],
        startTime: String? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetPropertyValueHistoryRequest, GetPropertyValueHistoryResponse> {
        let input = GetPropertyValueHistoryRequest(
            componentName: componentName, 
            componentPath: componentPath, 
            componentTypeId: componentTypeId, 
            endTime: endTime, 
            entityId: entityId, 
            interpolation: interpolation, 
            maxResults: maxResults, 
            orderByTime: orderByTime, 
            propertyFilters: propertyFilters, 
            selectedProperties: selectedProperties, 
            startTime: startTime, 
            workspaceId: workspaceId
        )
        return self.getPropertyValueHistoryPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listComponentTypes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listComponentTypesPaginator(
        _ input: ListComponentTypesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListComponentTypesRequest, ListComponentTypesResponse> {
        return .init(
            input: input,
            command: self.listComponentTypes,
            inputKey: \ListComponentTypesRequest.nextToken,
            outputKey: \ListComponentTypesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listComponentTypes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: A list of objects that filter the request.
    ///   - maxResults: The maximum number of results to return at one time. The default is 25. Valid Range: Minimum value of 1. Maximum value of 250.
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger used for logging
    @inlinable
    public func listComponentTypesPaginator(
        filters: [ListComponentTypesFilter]? = nil,
        maxResults: Int? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListComponentTypesRequest, ListComponentTypesResponse> {
        let input = ListComponentTypesRequest(
            filters: filters, 
            maxResults: maxResults, 
            workspaceId: workspaceId
        )
        return self.listComponentTypesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listComponents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listComponentsPaginator(
        _ input: ListComponentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListComponentsRequest, ListComponentsResponse> {
        return .init(
            input: input,
            command: self.listComponents,
            inputKey: \ListComponentsRequest.nextToken,
            outputKey: \ListComponentsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listComponents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - componentPath: This string specifies the path to the composite component, starting from the top-level component.
    ///   - entityId: The ID for the entity whose metadata (component/properties) is returned by the operation.
    ///   - maxResults: The maximum number of results returned at one time. The default is 25.
    ///   - workspaceId: The workspace ID.
    ///   - logger: Logger used for logging
    @inlinable
    public func listComponentsPaginator(
        componentPath: String? = nil,
        entityId: String,
        maxResults: Int? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListComponentsRequest, ListComponentsResponse> {
        let input = ListComponentsRequest(
            componentPath: componentPath, 
            entityId: entityId, 
            maxResults: maxResults, 
            workspaceId: workspaceId
        )
        return self.listComponentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEntities(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEntitiesPaginator(
        _ input: ListEntitiesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEntitiesRequest, ListEntitiesResponse> {
        return .init(
            input: input,
            command: self.listEntities,
            inputKey: \ListEntitiesRequest.nextToken,
            outputKey: \ListEntitiesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEntities(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: A list of objects that filter the request.  Only one object is accepted as a valid input.
    ///   - maxResults: The maximum number of results to return at one time. The default is 25. Valid Range: Minimum value of 1. Maximum value of 250.
    ///   - workspaceId: The ID of the workspace.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEntitiesPaginator(
        filters: [ListEntitiesFilter]? = nil,
        maxResults: Int? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEntitiesRequest, ListEntitiesResponse> {
        let input = ListEntitiesRequest(
            filters: filters, 
            maxResults: maxResults, 
            workspaceId: workspaceId
        )
        return self.listEntitiesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listMetadataTransferJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listMetadataTransferJobsPaginator(
        _ input: ListMetadataTransferJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListMetadataTransferJobsRequest, ListMetadataTransferJobsResponse> {
        return .init(
            input: input,
            command: self.listMetadataTransferJobs,
            inputKey: \ListMetadataTransferJobsRequest.nextToken,
            outputKey: \ListMetadataTransferJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listMetadataTransferJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - destinationType: The metadata transfer job's destination type.
    ///   - filters: An object that filters metadata transfer jobs.
    ///   - maxResults: The maximum number of results to return at one time.
    ///   - sourceType: The metadata transfer job's source type.
    ///   - logger: Logger used for logging
    @inlinable
    public func listMetadataTransferJobsPaginator(
        destinationType: DestinationType,
        filters: [ListMetadataTransferJobsFilter]? = nil,
        maxResults: Int? = nil,
        sourceType: SourceType,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListMetadataTransferJobsRequest, ListMetadataTransferJobsResponse> {
        let input = ListMetadataTransferJobsRequest(
            destinationType: destinationType, 
            filters: filters, 
            maxResults: maxResults, 
            sourceType: sourceType
        )
        return self.listMetadataTransferJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listProperties(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listPropertiesPaginator(
        _ input: ListPropertiesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListPropertiesRequest, ListPropertiesResponse> {
        return .init(
            input: input,
            command: self.listProperties,
            inputKey: \ListPropertiesRequest.nextToken,
            outputKey: \ListPropertiesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listProperties(_:logger:)``.
    ///
    /// - Parameters:
    ///   - componentName: The name of the component whose properties are returned by the operation.
    ///   - componentPath: This string specifies the path to the composite component, starting from the top-level component.
    ///   - entityId: The ID for the entity whose metadata (component/properties) is returned by the operation.
    ///   - maxResults: The maximum number of results returned at one time. The default is 25.
    ///   - workspaceId: The workspace ID.
    ///   - logger: Logger used for logging
    @inlinable
    public func listPropertiesPaginator(
        componentName: String? = nil,
        componentPath: String? = nil,
        entityId: String,
        maxResults: Int? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListPropertiesRequest, ListPropertiesResponse> {
        let input = ListPropertiesRequest(
            componentName: componentName, 
            componentPath: componentPath, 
            entityId: entityId, 
            maxResults: maxResults, 
            workspaceId: workspaceId
        )
        return self.listPropertiesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listScenes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listScenesPaginator(
        _ input: ListScenesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListScenesRequest, ListScenesResponse> {
        return .init(
            input: input,
            command: self.listScenes,
            inputKey: \ListScenesRequest.nextToken,
            outputKey: \ListScenesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listScenes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: Specifies the maximum number of results to display.
    ///   - workspaceId: The ID of the workspace that contains the scenes.
    ///   - logger: Logger used for logging
    @inlinable
    public func listScenesPaginator(
        maxResults: Int? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListScenesRequest, ListScenesResponse> {
        let input = ListScenesRequest(
            maxResults: maxResults, 
            workspaceId: workspaceId
        )
        return self.listScenesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSyncJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSyncJobsPaginator(
        _ input: ListSyncJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSyncJobsRequest, ListSyncJobsResponse> {
        return .init(
            input: input,
            command: self.listSyncJobs,
            inputKey: \ListSyncJobsRequest.nextToken,
            outputKey: \ListSyncJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSyncJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return at one time. The default is 50. Valid Range: Minimum value of 0. Maximum value of 200.
    ///   - workspaceId: The ID of the workspace that contains the sync job.
    ///   - logger: Logger used for logging
    @inlinable
    public func listSyncJobsPaginator(
        maxResults: Int? = nil,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSyncJobsRequest, ListSyncJobsResponse> {
        let input = ListSyncJobsRequest(
            maxResults: maxResults, 
            workspaceId: workspaceId
        )
        return self.listSyncJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSyncResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSyncResourcesPaginator(
        _ input: ListSyncResourcesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSyncResourcesRequest, ListSyncResourcesResponse> {
        return .init(
            input: input,
            command: self.listSyncResources,
            inputKey: \ListSyncResourcesRequest.nextToken,
            outputKey: \ListSyncResourcesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSyncResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: A list of objects that filter the request. The following filter combinations are supported:   Filter with state   Filter with ResourceType and ResourceId   Filter with ResourceType and ExternalId
    ///   - maxResults: The maximum number of results to return at one time. The default is 50. Valid Range: Minimum value of 0. Maximum value of 200.
    ///   - syncSource: The sync source.  Currently the only supported syncSource is SITEWISE .
    ///   - workspaceId: The ID of the workspace that contains the sync job.
    ///   - logger: Logger used for logging
    @inlinable
    public func listSyncResourcesPaginator(
        filters: [SyncResourceFilter]? = nil,
        maxResults: Int? = nil,
        syncSource: String,
        workspaceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSyncResourcesRequest, ListSyncResourcesResponse> {
        let input = ListSyncResourcesRequest(
            filters: filters, 
            maxResults: maxResults, 
            syncSource: syncSource, 
            workspaceId: workspaceId
        )
        return self.listSyncResourcesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listWorkspaces(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listWorkspacesPaginator(
        _ input: ListWorkspacesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListWorkspacesRequest, ListWorkspacesResponse> {
        return .init(
            input: input,
            command: self.listWorkspaces,
            inputKey: \ListWorkspacesRequest.nextToken,
            outputKey: \ListWorkspacesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listWorkspaces(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return at one time. The default is 25. Valid Range: Minimum value of 1. Maximum value of 250.
    ///   - logger: Logger used for logging
    @inlinable
    public func listWorkspacesPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListWorkspacesRequest, ListWorkspacesResponse> {
        let input = ListWorkspacesRequest(
            maxResults: maxResults
        )
        return self.listWorkspacesPaginator(input, logger: logger)
    }
}

extension IoTTwinMaker.ExecuteQueryRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTTwinMaker.ExecuteQueryRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            queryStatement: self.queryStatement,
            workspaceId: self.workspaceId
        )
    }
}

extension IoTTwinMaker.GetPropertyValueHistoryRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTTwinMaker.GetPropertyValueHistoryRequest {
        return .init(
            componentName: self.componentName,
            componentPath: self.componentPath,
            componentTypeId: self.componentTypeId,
            endTime: self.endTime,
            entityId: self.entityId,
            interpolation: self.interpolation,
            maxResults: self.maxResults,
            nextToken: token,
            orderByTime: self.orderByTime,
            propertyFilters: self.propertyFilters,
            selectedProperties: self.selectedProperties,
            startTime: self.startTime,
            workspaceId: self.workspaceId
        )
    }
}

extension IoTTwinMaker.GetPropertyValueRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTTwinMaker.GetPropertyValueRequest {
        return .init(
            componentName: self.componentName,
            componentPath: self.componentPath,
            componentTypeId: self.componentTypeId,
            entityId: self.entityId,
            maxResults: self.maxResults,
            nextToken: token,
            propertyGroupName: self.propertyGroupName,
            selectedProperties: self.selectedProperties,
            tabularConditions: self.tabularConditions,
            workspaceId: self.workspaceId
        )
    }
}

extension IoTTwinMaker.ListComponentTypesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTTwinMaker.ListComponentTypesRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            workspaceId: self.workspaceId
        )
    }
}

extension IoTTwinMaker.ListComponentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTTwinMaker.ListComponentsRequest {
        return .init(
            componentPath: self.componentPath,
            entityId: self.entityId,
            maxResults: self.maxResults,
            nextToken: token,
            workspaceId: self.workspaceId
        )
    }
}

extension IoTTwinMaker.ListEntitiesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTTwinMaker.ListEntitiesRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            workspaceId: self.workspaceId
        )
    }
}

extension IoTTwinMaker.ListMetadataTransferJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTTwinMaker.ListMetadataTransferJobsRequest {
        return .init(
            destinationType: self.destinationType,
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            sourceType: self.sourceType
        )
    }
}

extension IoTTwinMaker.ListPropertiesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTTwinMaker.ListPropertiesRequest {
        return .init(
            componentName: self.componentName,
            componentPath: self.componentPath,
            entityId: self.entityId,
            maxResults: self.maxResults,
            nextToken: token,
            workspaceId: self.workspaceId
        )
    }
}

extension IoTTwinMaker.ListScenesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTTwinMaker.ListScenesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            workspaceId: self.workspaceId
        )
    }
}

extension IoTTwinMaker.ListSyncJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTTwinMaker.ListSyncJobsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            workspaceId: self.workspaceId
        )
    }
}

extension IoTTwinMaker.ListSyncResourcesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTTwinMaker.ListSyncResourcesRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            syncSource: self.syncSource,
            workspaceId: self.workspaceId
        )
    }
}

extension IoTTwinMaker.ListWorkspacesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTTwinMaker.ListWorkspacesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}
